package org.mango.jiayin.operater.operater.impl;

import java.util.List;
import java.util.Map;
import org.mango.jiayin.operater.domain.EventData;
import org.mango.jiayin.operater.operater.Operater;

/**
 * <p>
 * Title: empty
 * </p>
 * <p>
 * Description: 是否空算子 例如: empty(key)-->判断data中的key对应值是否为空(支持字符串,数组,list,map)
 * </p>
 *
 * @author ji'anyuan
 * @date 2018年3月10日
 */
public class EmptyOp implements Operater {

  @Override
  public String getName() {
    return "empty";
  }

  @Override
  public Object calc(String[] opParames, Object data, Map<String, Object> nestValues) {
    Operater.checkParames(opParames, 1);
    Object value = ((EventData) data).getValueOrDefault(opParames[0],
        opParames[0].replace("\'", ""));
    if (nestValues != null && nestValues.containsKey(opParames[0])) {
      value = nestValues.getOrDefault(opParames[0], value);
    }

    if (value == null) {
      return true;
    }

    if (value instanceof String) {
      return "".equals(value);
    }

    if (value instanceof Object[]) {
      return ((Object[]) value).length == 0;
    }

    if (value instanceof List) {
      return ((List) value).isEmpty();
    }

    if (value instanceof Map) {
      return ((Map) value).isEmpty();
    }

    return false;
  }
}
